/*
 * Copyright (c) 2021，上海福宇龙汽车科技有限公司
 * All rights reserved.
 * 文件名称: drv_typedef.h
 * 摘要: 基本宏定义
 * 当前版本: V1.0.0 WCD
 * Date: 2021-11-01
 * 历史版本: Vx.x.x，编写者/修改者，修改时间，修改内容（重大发布时，总结重点变更内容）
 */

#ifndef DRV_TYPEDEF_H
#define DRV_TYPEDEF_H
 

typedef enum
{
   OFF = 0,
   ON
}Switch_en;

typedef enum
{
    FALSE = 0U,
    TRUE,
} EM_TRUE_FALSE;

typedef enum
{
    LVL_L = 0U,
    LVL_H,
} EM_LV;

typedef enum
{
    NO = 0U,
    YES,
} EM_NO_YES;

typedef enum
{
    Reset = 0x00U,
    Set,
} FlagStatus, ITStatus, Bit_Act_Type;


typedef enum
{
    FAIL = 0x00U,
    SUCCESS,
} ErrorStatus;

typedef enum
{
    UART_OK,
    UART_LENGTH_ERROR,
    UART_ERROR,
} Uart_Status;

typedef enum
{
    /*write operation*/
    OPT_WRITE = 0x00U,
    /*read operation*/
    OPT_READ,
} OperateDirection;

typedef enum
{
    DRV_ERROR_OK = 10U,/*没有错误*/
    DRV_ERROR_POINTER_NULL,/*空指针*/
    DRV_ERROR_PARAM,/*参数错误*/
    DRV_ERROR_TIMEOUT,/*超时*/
    DRV_ERROR_BUSY,/*正忙*/
    DRV_ERROR_FIFO, /*FIFO空间不足*/
    DRV_ERROR_NONSUPPORT /*不支持*/
} DRV_ERROR_CODE,DRV_ERROR_CODE_OR_DATA;

#ifndef NULL
#define NULL ((void *)0)
#endif  /* NULL */

#ifndef NULL_PTR
#define NULL_PTR ((void *)0)
#endif

/*寄存器置位、清零、读*/
/*设置寄存器中某一位为1*/
#define BSET(bit, reg) ((reg) |= (1UL << (bit)))
/*设置寄存器中某一位为0*/
#define BCLR(bit, reg) ((reg) &= ~(1UL << (bit)))
/*得到寄存器中某一位状态*/
#define BGET(bit, reg) (((t_uint)(reg) >> (t_uint)(bit)) & 1U)

/*Set 第n位*/
#define BIT(n) (1UL << (t_uint)n)
/*Set 第n位*/
#define BIT1(n) (1UL << (t_uint)n)
/*CLEAR 第n位*/
#define BIT0(n) (~BIT1(n))
#define IS_ALL_NULL(PTR) (PTR != NULL)
#define STR_CONCAT2(s1, s2) (s1##s2)
#define STR_CONCAT3(s1, s2, s3) (s1##s2##s3)
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))

//写保护
#define protected_write(preg,pstatus,reg,value)   do{\
                                                  (preg)=0xa5u;\
                                                  (reg)=(value);\
                                                  (reg)=~(value);\
                                                  (reg)=(value);\
                                                  }while((pstatus)==1u)

#endif
